#include <stdio.h>

int main() {
    // 打开模式
    // r  以只读的方式打开文件 (不创建文件, 若文件不存在就报错)
    // w  以只写的方式打开文件 (文件不存在就创建文件, 如果文件存在就清空文件内容)
    // b  以二进制的文本类型读或写文件
    // r+ 以可读、可写的方式打开文件 (不创建新文件)
    // w+ 以可读、可写的方式打开文件 (文件不存在就创建文件, 如果文件存在就清空文件内容)
    // a+ 以文本添加的方式打开文件 (打开文件并在末尾追加文件, 若文件不存在就创建文件)
    FILE *wfp_01 = fopen("./a.txt", "w+");

    fputs("Hello World!", wfp_01);

    // int fseek(FILE *stream, long offset, int whence);
    // 功能: 移动文件流(文件的光标)的读写位置
    // stream: 操作文件的指针
    // offset: 更根据 whence 来移动的位移数(偏移量), 可以是正数, 也可以是负数
    // whence:
    // SEEK_SET: 从文件开头移动 offset 个字节(必须为正)
    // SEEK_CUR: 从当前位置移动 offset 个字节(可正可负)
    // SEEK_END: 从文件末尾移动 offset 个字节(必须为负)
    // return: 0 为成功, -1 为失败
    // 易错点: 文件读取方式为 a 时, 文件的光标始终为文件末尾, 调用 fseek 不会改变光标的位置
    fseek(wfp_01, 2, SEEK_SET);

    fputs("Blue", wfp_01);

    // 打开的文件资源在使用完成之后就要关闭
    fclose(wfp_01);

    return 0;
}